<?php
 //接口类型：互亿无线触发短信接口，支持发送验证码短信、订单通知短信等。
 // 账户注册：请通过该地址开通账户http://sms.ihuyi.com/register.html
 // 注意事项：
 //（1）调试期间，请用默认的模板进行测试，默认模板详见接口文档；
 //（2）请使用APIID（查看APIID请登录用户中心->验证码短信->产品总览->APIID）及 APIkey来调用接口
 //（3）该代码仅供接入互亿无线短信接口参考使用，客户可根据实际需要自行编写；
namespace common\service\sms\ihuyi;

use yii\web\NotFoundHttpException;

class sms
{
	/**
	 * 请求数据到短信接口，检查环境是否 开启 curl init。
	 * @param $curlPost
	 * @param $url
	 * @return mixed
	 */
	public function post($curlPost,$url){
		$curl = curl_init();
		curl_setopt($curl, CURLOPT_URL, $url);
		curl_setopt($curl, CURLOPT_HEADER, false);
		curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
		curl_setopt($curl, CURLOPT_NOBODY, true);
		curl_setopt($curl, CURLOPT_POST, true);
		curl_setopt($curl, CURLOPT_POSTFIELDS, $curlPost);
		$return_str = curl_exec($curl);
		curl_close($curl);
		return $return_str;
	}

	/**
	 * 将 xml数据转换为数组格式。
	 * @param $xml
	 * @return array
	 */
	public function xml_to_array($xml){
		$reg = "/<(\w+)[^>]*>([\\x00-\\xFF]*)<\\/\\1>/";
		$arr = [];
		if(preg_match_all($reg, $xml, $matches)){
			$count = count($matches[0]);
			for($i = 0; $i < $count; $i++){
				$subxml= $matches[2][$i];
				$key = $matches[1][$i];
				if(preg_match( $reg, $subxml )){
					$arr[$key] = $this->xml_to_array( $subxml );
				}else{
					$arr[$key] = $subxml;
				}
			}
		}
		return $arr;
	}

	/**
	 * @param $mobile
	 * @param $mobile_code
	 * @return bool
	 * @throws NotFoundHttpException
	 */
	public function send($mobile,$mobile_code){
		$account = 'C77547475';
		$password = 'e9ea8605a5c39ea51538cbc543ce7a8b';
		//短信接口地址
		$target = "http://106.ihuyi.cn/webservice/sms.php?method=Submit";
		$content = rawurlencode(sprintf("您的验证码是：%s。请不要把验证码泄露给其他人。",$mobile_code));
		$postdata = sprintf("account=%s&password=%s&mobile=%s&content=%s",$account,$password,$mobile,$content);
		$gets =  $this->xml_to_array($this->post($postdata, $target));
		if( $gets['SubmitResult']['code'] == 2){
			return true;
		}
		throw new NotFoundHttpException($gets['SubmitResult']['msg']);
	}

}
?>